package com.yds.modewithprinceple.strategy;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;

import com.yds.modewithprinceple.R;
import com.yds.modewithprinceple.databinding.ActivityStrategyPatternBinding;

/**
 * 策略模式
 *
 * 包含一个策略接口和一组实现这个接口的策略类
 * 对同一问题或方法的不同处理方式单独封装起来
 *
 * Strategy模式解决的问题是把一个系列完成相同工作，
 * 却实现不同的算法(行为)包装到一系列的策略类里面，
 * 使得它们可以相互替换，提供一个访问接口，
 * 由客户端决定在什么情况下使用什么具体策略，来完成某一功能。
 */
@SuppressWarnings("all")
public class StrategyPatternActivity extends AppCompatActivity implements View.OnClickListener {
    private ActivityStrategyPatternBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityStrategyPatternBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        binding.tvStrategyIntroduce.setText("/**\n" +
                " * 策略模式\n" +
                " * \n" +
                " * 包含一个策略接口和一组实现这个接口的策略类\n" +
                " * 对同一问题或方法的不同处理方式单独封装起来\n" +
                " *\n" +
                " * Strategy模式解决的问题是把一个系列完成相同工作，\n" +
                " * 却实现不同的算法(行为)包装到一系列的策略类里面，\n" +
                " * 使得它们可以相互替换，提供一个访问接口，\n" +
                " * 由客户端决定在什么情况下使用什么具体策略，来完成某一功能。\n" +
                " */");

        binding.btStrategyWechat.setOnClickListener(this);
        binding.btStrategyAli.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btStrategyWechat:
                StrategyFactory.getStrategy().payResult();
                break;
            case R.id.btStrategyAli:
                StrategyFactory.getStrategy(StrategyFactory.PAY_TYPE_A).payResult();
                break;
        }
    }
}